因为 openwrt
对 golang 支持不佳,被迫写C,所以不得已使用 Clion
来对印度人的开源项目进行二次开发,印度人的项目使用的管理工具是 autoconf
,而 Clion 对 autoconf
的支持实在不行,在经历了三个月纯粹把IDE当成 “有全局查找功能的编辑器” 后,忍无可忍 ,就有了创建独立于老代码的新项目,然后在老代码里引用新项目动态库的想法。
用 Clion
给 Openwrt 开发软件,首先得给 Clion
配置上 openwrt
的工具链,以 linux 上的 Clion
为例 , 在 setting
-> Build,Execution,Deployment
-> ToolChains
里,添加一个配置,把 Clion 所使用的 CMake
, gcc
, g++
配置为openwrt所用的版本 ,CMake
的目录一般在
1 | {openwrt_dir}/staging_dir/host/bin/CMake |
而gcc
以及g++
一般在
1 | {openwrt_dir}/staging_dir/toolchain-${arch}_gcc_${version}/bin/${arch}-openwrt-linux-${version}-<gcc/g++> |
这样我们就配置好了 Clion
所使用的编译器。
之后我们创建的项目是给 openwrt
创建的,所以需要用到 openwrt
的动态库以及头文件。当你使用Clion
来创建一个新项目的时候,会自动生成一个 CMakeLists.txt
,我们可以在这里做配置。因为我这里用的是老版本的 CMake
功能并不完全 , 所以需要预定义好:
1 | SET(CMAKE_FIND_LIBRARY_PREFIXES |
然后再定义我们头文件的目录:
1 | include_directories(${openwrt_dir}/staging_dir/target-${arch}_${version}/usr/include) |
定义我们所需的动态库的目录:
1 | link_directories(${openwrt_dir}/staging_dir/target-${arch}_${version}/usr/lib) |
定义好我们软件所需要的库
1 | SET(LIBS |
然后把库与我们的执行程序链接在一起:
1 | add_executable(my_program main.c) |
如果我们要编译的是一个动态库的话:
1 | add_library(my_libs libs.c) |
这样,我们就拥有了一个在本机上编译目标openwrt平台软件的环境了。关于 CMake
的软件开发及配置方法请自行参考资料,不做赘述。